package com.angcyo.selenium.bean

/**
 * 描述选择器
 * 通过描述脚本, 获取对应的元素
 *
 * Email:angcyo@126.com
 * @author angcyo
 * @date 2020/12/30
 */
data class SelectorBean(

    /**依次选择iframe, 直到成功为止*/
    var frameList: List<FrameBean>? = null,

    /**指定需要操作的iframe, 如果指定了, 那么之后的元素操作都在此iframe中进行
     * 优先切换, 切换失败则使用[frameList]*/
    var frame: FrameBean? = null,

    //----------------------------------------------------------------

    /*主选择, 或者的关系, 所有选中的元素都会被追加*/

    /**通过css选择器获取元素, 同时满足列表中的所有选择条件
     * 支持$0 $[xxx]表达式
     * [com.angcyo.selenium.auto.parse.AutoParse.parseText]*/
    var cssList: List<String>? = null,

    /**通过[text]获取元素时, 需要指定在那些标签中查找文本. 空格分隔多个标签*/
    var tags: String? = null,

    /**通过文本获取元素, 支持正则表达式, 同时满足列表中的所有选择条件,需要指定[tags]
     * 支持$0 $[xxx]表达式
     * [com.angcyo.selenium.auto.parse.AutoParse.parseText]
     * */
    var textList: List<String>? = null,

    /**通过[标签]选择元素*/
    var tagList: List<String>? = null,

    //----------------------------------------------------------------

    /*次选择, 在主选择后, 过滤*/

    /**通过获取指定[tags]元素的指定属性值, 来选择元素
     * [name:code placeholder:验证码] 获取属性名[name=code]并且属性[placeholder=验证码]的元素
     * 正则匹配文本
     *
     * 如果未指定[cssList] [textList] [tagList], 那么会根据[tags]重新选择元素
     * 如果指定了, 则会过滤选择后的元素
     * */
    var attrList: List<String>? = null,

    /**通过矩形坐标获取元素
     * 如果未指定[cssList] [textList] [tagList] [attrList], 那么会根据[tags]重新选择元素
     * 如果指定了, 则会过滤选择后的元素. 一一对应索引
     * "l:|left:" "r:|right:" "t:|top:" "b:|bottom:" "w:|width:" "h:|height:"
     * 约等于时的浮动计算范围 "a:|about:"
     * */
    var rectList: List<String>? = null,

    //----------------------------------------------------------------

    /**根据过滤条件, 过滤一层*/
    var filter: FilterBean? = null,

    /**根据本次选择元素列表, 继续查找子子元素*/
    var after: SelectorBean? = null
)
